#ifndef __SYSTEM_GATEWAY_H__
#define __SYSTEM_GATEWAY_H__

#include "common_def.h"
#include "soc_osal.h"
#include "app_init.h"
#include "osal_event.h"
#include "errcode.h"

// 系统任务优先级定义
#define SYSTEM_TASK_PRIORITY_HIGH 20
#define SYSTEM_TASK_PRIORITY_NORMAL 25
#define SYSTEM_TASK_PRIORITY_LOW 30

// 任务句柄
extern osal_task *g_TaskHandle_SystemGatewayWifiConfig; // 系统网关WiFi配置任务
extern osal_task *g_TaskHandle_LedBlinky;               // LED闪烁任务
extern osal_task *g_TaskHandle_SystemDataUpdate;        // 系统数据更新任务
extern osal_task *g_TaskHandle_SystemEventHandle;       // 系统事件处理任务
extern osal_task *g_TaskHandle_IotMqttConnect;          // IoT云端MQTT连接
extern osal_task *g_TaskHandle_IotDataReporting;        // IoT云端数据上报

// 系统数据更新事件宏定义
#define SYSTEM_DATA_UPDATE_EVENT_TEMPERATURE 0x0001 // 温度数据更新事件
#define SYSTEM_DATA_UPDATE_EVENT_HUMIDITY 0x0002    // 湿度数据更新事件
#define SYSTEM_DATA_UPDATE_EVENT_LIGHT 0x0004       // 光照数据更新事件
#define SYSTEM_DATA_UPDATE_EVENT_ALL 0x0007         // 所有数据更新事件

// 系统事件宏定义
#define SYSTEM_EVENT_KEY1_REESS 0x0001        // 按键1按下事件
#define SYSTEM_EVENT_KEY1_RELEASE 0x0002      // 按键1释放事件
#define SYSTEM_EVENT_KEY2_REESS 0x0004        // 按键2按下事件
#define SYSTEM_EVENT_KEY2_RELEASE 0x0008      // 按键2释放事件
#define SYSTEM_EVENT_MOTOR_STOP 0x0010        // 电机停止事件
#define SYSTEM_EVENT_MOTOR_ADVANCE 0x0020     // 电机前进事件
#define SYSTEM_EVENT_MOTOR_BACK 0x0040        // 电机后退事件
#define SYSTEM_EVENT_MOTOR_LEFT 0x0080        // 电机左转事件
#define SYSTEM_EVENT_MOTOR_RIGHT 0x0100       // 电机右转事件
#define SYSTEM_EVENT_WIFI_CONNECTED 0x0200    // WiFi连接事件
#define SYSTEM_EVENT_WIFI_DISCONNECTED 0x0400 // WiFi断开事件
#define SYSTEM_EVENT_ALL 0x07FF               // 所有系统事件

// 事件句柄
extern osal_event g_EventHandle_SystemDataUpdate; // 系统数据更新事件
extern osal_event g_EventHandle_SystemEvent;      // 系统事件

// 系统数据
struct SystemData_t
{
    uint16_t Temperature; // 温度值， 单位：0.1摄氏度
    uint16_t Humidity;    // 湿度值， 单位：0.1%
    uint16_t Light;       // 光照强度

    uint8_t MotprSpeed; // 电机速度， 取值范围：0-100
};
extern struct SystemData_t g_system_data;

// 系统网络功能函数声明
errcode_t SmartHome_SystemGatewayWifiConfig(void);

// 系统时间同步函数声明
errcode_t NTP_UpdateSystemTime(void);

// 串口屏时间设置函数声明
void SerialScreen_SetSystemTime(uint8_t hour, uint8_t minute, uint8_t second);

#endif // __SYSTEM_GATEWAY_H__